CSRF Vulnerability
Cookie Nedir?
Web siteleri sayfalar arasında gezinti yaparken sürekli kullanıcı adı, şifre girme zorunluluğumuz olmaması adına, kullanıcı adı ve şifre girdikten sonra bize bir “sadla3skmjNsScdslnjjsnjd4d4asd” şeklinde bir anahtar yani cookie verilir. Cookie ler sayesinde sürekli kullanıcı adı şifre girmek zorunda kalmayız. Fakat bu kolaylığın da getirdiği zafiyet CSRF zafiyetidir.
CSRF Nedir?
Cross Site Request Forgery (Siteler Arası İstek Sahtekârlığı), bir web uygulamasının isteğin uygulama üzerinde yapılıp yapılmadığını tespit edememesi durumunda ortaya çıkan bir zafiyettir. Bu zafiyette bir sosyal mühendislikte dahil olabilir. Bu zafiyeti örneklerle bWAPP üzerinden test yaparak inceleyelim.
CSRF Nasıl Test Edilir?
Test aşamasında şifreyi değiştiren bir url oluşturarak kurbana tıklamasını sağlayabiliriz. Ya da sizin web sitenize ulaşan kurbanların farkında olmadan kod çalıştırmayı sağlayabilirsiniz (Bunun için test yapılacak web sitesinin clickjacking zafiyeti de bulunması gerekir). Şifremizi 123 yapıp url haline getirmeye çalışacağız.
Yukarıdaki gibi şifre değişikliği sağlayan url i kopyalıyoruz. Ve bunu herhangi bir kurbana tıklattırdığımızda şifresini bug yapmış olacağız. Deneme amaçlı kullanıcı adı ve şifresi allsafe olan bir hesap oluşturduk ve bu linke tıklattıracağız.
Kullanıcı ile url’e tıklamış olduk ve tekrar giriş yaptığımızda allsafe şifresini kabul etmedi şifreyi bug olarak denediğimizde girebildik.
Bir de PortSwigger’ın CSRF ile ilgili bir labını çözelim.
Burada bize email değiştirmeyle ilgili bir CSRF zafiyeti bulunduğu ve html dosyası oluşturarak kurbanın epostasını değiştirin diyor. Lab’a giriyoruz ve My account bölümüne tıkladıktan sonra kullanıcı adı wiener şifre peter şeklinde ilk başta giriş yapacağız.
Karşımıza yukarıdaki gibi bir sayfa geliyor bu kısımda BurpSuite paketini inceleyeceğiz ve aslında BurpSuite (PRO) bize hazır bir html kodu düzenlemiş olacak. Fakat biz şu şekilde html dosyasını kendimiz hazırlayacağız.
<script>history.pushState('', '', '/')</script>
<form action="buraya degisme url mizi giriyoruz" method="POST">
<input type="hidden" name="email" value="bu kısma bu şekilde mail giriyoruz@mail.com" />
<input type="submit" value="Submit request" />
</form>
<script>
document.forms[0].submit();
</script>
Kodumuzu düzenledikten sonra kurbanın gireceği web sitesi olarak düşünülmüş “go to exploit server” butonuna tıklıyoruz ve buraya kurban girdiğinde çalıştıracağımız kodu yazacağız.
Yukarıdaki şekildeki gibi ilk başta kodumuzu yazıyoruz. Aşama 2 olarak Store butonunu ile kodu depoluyoruz ve 3. Aşama da kurban bu sayfaya maruz kalıyor. Ve yeni şifresi [email protected] şeklinde olmuş oluyor.
Peki Gerçek Web Sitelerinde Labaratuvarlardaki Gibi Çıkar Mı?
PortSwiggerda çözdüğümüz lab biraz daha az karşılaşılabilmekte bunun sebebi bir web sitesinin sayfasını başka bir web sitesinde çalıştırmaya clickjacking zafiyeti deniliyor yani bir zafiyet daha olacakki bu saldırı ile gerçekleşsin. Fakat iki çözdüğümüz örnek ile zafiyet bulmak mümkün. Günümüzde buna tarayıcıların da önlem almasına rağmen hala sıklıkla karşılaşılabilmekte.
Birkaç Örnek CSRF Raporları
https://hackerone.com/reports/1085336
https://hackerone.com/reports/1046630
https://hackerone.com/reports/534450